package com.kotlin

/**
 * 测试内部类（普通内部类和静态内部类和匿名内部类）
 * 匿名内部名可以同时继承类和实现接口
 * @author huan.fu
 * @date 2019-03-10 - 21:09
 */

class OuterClass {
    var status: Int = 1

    /**
     * 静态内部类
     */
    class StaticInner {
        fun show() {
            println("无法访问到status")
        }
    }

    /**
     * 非静态内部类
     */
    inner class InnerClass {
        val status: Int = 2

        fun show() {
            println("访问外部类的status变量：${this@OuterClass.status} , 内部类自身的status:$status")
        }

    }
}

/**
 * 以下2个类测试匿名内部类
 */
interface EventHandler {
    fun handle()
}

class View {
    var eventHandler: EventHandler? = null
}

fun main() {
    var inner01 = OuterClass.StaticInner()
    var inner02 = OuterClass().InnerClass()
    inner02.show()
    // 测试匿名内部类
    var view = View()
    view.eventHandler = object : EventHandler {
        override fun handle() {
            println("测试匿名内部类")
        }
    }
}